A known Storage Area Network (SAN) controller is the interface between an application host and a storage controller in a SAN network. The SAN controller controls the data signals over a plurality of paths between itself and the storage controller. While the controller may spread I/O activity over some or all of these paths, it will generally select a single path for each individual I/O transmission. If this path is not operational for some reason, the SAN controller and application host must wait for a long period before determining that I/O is not going to complete. Normally the SAN controller will not submit the I/O operation via an alternative path until the original attempt has timed out completely or the interconnecting fabric between the host and the storage controller has told the host that the path is not operational. This is because the controller is unable to tell the difference between an unresponsive path and a disk operation that is simply taking a long time to execute in the storage. This approach imposes a significant performance degradation on the I/Os that are submitted to unresponsive paths. For some applications which require I/Os to be completed within a few seconds this is unacceptable.
Another problem that can occur in SAN systems is with the host submitting the I/O via the selected path and when this I/O does not complete the host submits another I/O via a different path, and this second I/O does complete. The host now gives good completion status to the application and the application de-allocates the buffer associated with the transaction. The original I/O now completes using a buffer that has been de-allocated which could cause significant problems. To avoid this problem, the host (or device driver) must ensure that the host buffer associated with the transaction is not accessed by any late completing I/O activity.